package com.guiwu.utils;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 类型转换工具类
 *
 * @author jiangjinjian
 * @date 2023.02.08
 */
public class TypeConvertUtil {


    /**
     * 将k-v的mapList转换成
     * k.value-v.value的map
     *
     * @param mapList map列表
     * @param k       原来mapList中key
     * @param v       原来mapList中value
     * @return
     */
    public static <T extends Object> Map<T, T> mapListToMap(List<Map<T, T>> mapList, T k, T v) {
        //列表为空则返回空
        if (mapList == null)
            return null;
        //key和value为空抛出异常
        Objects.requireNonNull(k, "key为空");
        Objects.requireNonNull(v, "value为空");
        //返回map，重复key则覆盖
        return mapList.stream()
                .map(map -> {
                    map.put(map.get(k), map.get(v));
                    return map.entrySet();
                }).flatMap(Set::stream)
                .filter(set->!set.getKey().equals(k) && !set.getKey().equals(v))
                .collect(Collectors
                        .toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));
    }

}
